{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First we load the libraries we need and start a graph, as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from sklearn import datasets\n",
    "sess = tf.Session()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "from data import load_mnist\n",
    "data = load_mnist(\"data\", one_hot=True)\n",
    "X_train = data[\"train\"][\"images\"]\n",
    "y_train = data[\"train\"][\"labels\"]\n",
    "X_test = data[\"test\"][\"images\"]\n",
    "y_test = data[\"test\"][\"labels\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 2000\n",
    "num_epoch = 5000\n",
    "num_class = 10\n",
    "n_dim = 28 * 28\n",
    "x_data = tf.placeholder(shape=[None, n_dim], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[num_class, None], dtype=tf.float32)\n",
    "prediction_grid = tf.placeholder(shape=[None, n_dim], dtype=tf.float32)\n",
    "b = tf.Variable(tf.random.normal(shape=[num_class, batch_size]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "gamma = tf.constant(-1e3)\n",
    "dist = tf.reduce_sum(tf.square(x_data), 1)\n",
    "dist = tf.reshape(dist, [-1, 1])\n",
    "sq_dists = tf.add(tf.subtract(dist, tf.multiply(2., tf.matmul(x_data, tf.transpose(x_data)))), tf.transpose(dist))\n",
    "my_kernel = tf.exp(tf.multiply(gamma, tf.abs(sq_dists)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "def reshape_matmul(mat):\n",
    "    v1 = tf.expand_dims(mat, 1)\n",
    "    v2 = tf.reshape(v1, [num_class, batch_size, 1])\n",
    "    return(tf.matmul(v2, v1)) # tf.batchmatmul"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_output = tf.matmul(b, my_kernel)\n",
    "first_term = tf.reduce_sum(b)\n",
    "b_vec_cross = tf.matmul(tf.transpose(b), b)\n",
    "y_target_cross = reshape_matmul(y_target)\n",
    "second_term = tf.reduce_sum(tf.multiply(my_kernel, tf.multiply(b_vec_cross, y_target_cross)), [1, 2])\n",
    "loss = tf.reduce_sum(tf.negative(tf.subtract(first_term, second_term)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "rA = tf.reshape(tf.reduce_sum(tf.square(x_data), 1), [-1, 1])\n",
    "rB = tf.reshape(tf.reduce_sum(tf.square(prediction_grid), 1), [-1, 1])\n",
    "pred_sq_dist = tf.add(tf.subtract(rA, tf.multiply(2., tf.matmul(x_data, tf.transpose(prediction_grid)))), tf.transpose(rB))\n",
    "pred_kernel = tf.exp(tf.multiply(gamma, tf.abs(pred_sq_dist)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction_output = tf.matmul(tf.multiply(y_target, b), pred_kernel)\n",
    "prediction = tf.argmax(prediction_output - tf.expand_dims(tf.reduce_mean(prediction_output, 1), 1), 0)\n",
    "accuracy = tf.reduce_mean(tf.cast(tf.equal(prediction, tf.argmax(y_target, 0)), tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "my_opt = tf.train.GradientDescentOptimizer(0.001)\n",
    "train_step = my_opt.minimize(loss)\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step #25\n",
      "Loss = -30393.674\n",
      "Step #50\n",
      "Loss = -75159.83\n",
      "Step #75\n",
      "Loss = -115587.984\n",
      "Step #100\n",
      "Loss = -152085.25\n",
      "Step #125\n",
      "Loss = -185187.81\n",
      "Step #150\n",
      "Loss = -215332.02\n",
      "Step #175\n",
      "Loss = -242225.94\n",
      "Step #200\n",
      "Loss = -267210.94\n",
      "Step #225\n",
      "Loss = -289369.38\n",
      "Step #250\n",
      "Loss = -309079.7\n",
      "Step #275\n",
      "Loss = -327608.84\n",
      "Step #300\n",
      "Loss = -344843.7\n",
      "Step #325\n",
      "Loss = -359471.03\n",
      "Step #350\n",
      "Loss = -371519.88\n",
      "Step #375\n",
      "Loss = -384641.16\n",
      "Step #400\n",
      "Loss = -394724.5\n",
      "Step #425\n",
      "Loss = -405165.8\n",
      "Step #450\n",
      "Loss = -413763.3\n",
      "Step #475\n",
      "Loss = -421164.7\n",
      "Step #500\n",
      "Loss = -431706.88\n",
      "Step #525\n",
      "Loss = -437638.12\n",
      "Step #550\n",
      "Loss = -441779.25\n",
      "Step #575\n",
      "Loss = -449363.28\n",
      "Step #600\n",
      "Loss = -456180.84\n",
      "Step #625\n",
      "Loss = -459037.78\n",
      "Step #650\n",
      "Loss = -461838.38\n",
      "Step #675\n",
      "Loss = -466906.12\n",
      "Step #700\n",
      "Loss = -469611.16\n",
      "Step #725\n",
      "Loss = -470383.5\n",
      "Step #750\n",
      "Loss = -476523.7\n",
      "Step #775\n",
      "Loss = -473782.9\n",
      "Step #800\n",
      "Loss = -479159.5\n",
      "Step #825\n",
      "Loss = -483641.3\n",
      "Step #850\n",
      "Loss = -482711.56\n",
      "Step #875\n",
      "Loss = -484924.2\n",
      "Step #900\n",
      "Loss = -488471.94\n",
      "Step #925\n",
      "Loss = -486284.9\n",
      "Step #950\n",
      "Loss = -491267.1\n",
      "Step #975\n",
      "Loss = -490279.2\n",
      "Step #1000\n",
      "Loss = -496582.9\n",
      "Step #1025\n",
      "Loss = -490113.25\n",
      "Step #1050\n",
      "Loss = -492167.25\n",
      "Step #1075\n",
      "Loss = -491443.28\n",
      "Step #1100\n",
      "Loss = -498556.62\n",
      "Step #1125\n",
      "Loss = -496300.3\n",
      "Step #1150\n",
      "Loss = -495745.22\n",
      "Step #1175\n",
      "Loss = -495174.53\n",
      "Step #1200\n",
      "Loss = -498675.84\n",
      "Step #1225\n",
      "Loss = -494586.3\n",
      "Step #1250\n",
      "Loss = -496851.5\n",
      "Step #1275\n",
      "Loss = -499258.4\n",
      "Step #1300\n",
      "Loss = -493379.34\n",
      "Step #1325\n",
      "Loss = -494551.06\n",
      "Step #1350\n",
      "Loss = -496233.06\n",
      "Step #1375\n",
      "Loss = -496043.7\n",
      "Step #1400\n",
      "Loss = -495398.0\n",
      "Step #1425\n",
      "Loss = -498221.9\n",
      "Step #1450\n",
      "Loss = -500067.25\n",
      "Step #1475\n",
      "Loss = -498325.9\n",
      "Step #1500\n",
      "Loss = -498954.12\n",
      "Step #1525\n",
      "Loss = -503288.38\n",
      "Step #1550\n",
      "Loss = -499810.97\n",
      "Step #1575\n",
      "Loss = -496696.28\n",
      "Step #1600\n",
      "Loss = -499071.97\n",
      "Step #1625\n",
      "Loss = -498505.53\n",
      "Step #1650\n",
      "Loss = -497908.88\n",
      "Step #1675\n",
      "Loss = -501221.8\n",
      "Step #1700\n",
      "Loss = -505777.6\n",
      "Step #1725\n",
      "Loss = -500473.7\n",
      "Step #1750\n",
      "Loss = -500632.75\n",
      "Step #1775\n",
      "Loss = -502215.7\n",
      "Step #1800\n",
      "Loss = -503854.97\n",
      "Step #1825\n",
      "Loss = -496813.0\n",
      "Step #1850\n",
      "Loss = -502818.3\n",
      "Step #1875\n",
      "Loss = -499855.2\n",
      "Step #1900\n",
      "Loss = -503693.34\n",
      "Step #1925\n",
      "Loss = -498802.9\n",
      "Step #1950\n",
      "Loss = -499272.9\n",
      "Step #1975\n",
      "Loss = -501333.62\n",
      "Step #2000\n",
      "Loss = -499549.62\n",
      "Step #2025\n",
      "Loss = -505568.3\n",
      "Step #2050\n",
      "Loss = -504129.56\n",
      "Step #2075\n",
      "Loss = -503167.53\n",
      "Step #2100\n",
      "Loss = -501264.5\n",
      "Step #2125\n",
      "Loss = -502770.5\n",
      "Step #2150\n",
      "Loss = -502625.66\n",
      "Step #2175\n",
      "Loss = -503365.3\n",
      "Step #2200\n",
      "Loss = -497134.2\n",
      "Step #2225\n",
      "Loss = -498999.78\n",
      "Step #2250\n",
      "Loss = -501940.94\n",
      "Step #2275\n",
      "Loss = -495962.0\n",
      "Step #2300\n",
      "Loss = -502677.4\n",
      "Step #2325\n",
      "Loss = -500572.12\n",
      "Step #2350\n",
      "Loss = -500603.88\n",
      "Step #2375\n",
      "Loss = -500075.62\n",
      "Step #2400\n",
      "Loss = -502403.75\n",
      "Step #2425\n",
      "Loss = -501524.75\n",
      "Step #2450\n",
      "Loss = -502605.06\n",
      "Step #2475\n",
      "Loss = -496370.2\n",
      "Step #2500\n",
      "Loss = -495678.38\n",
      "Step #2525\n",
      "Loss = -501079.5\n",
      "Step #2550\n",
      "Loss = -502207.72\n",
      "Step #2575\n",
      "Loss = -496579.7\n",
      "Step #2600\n",
      "Loss = -500402.38\n",
      "Step #2625\n",
      "Loss = -499061.88\n",
      "Step #2650\n",
      "Loss = -501048.66\n",
      "Step #2675\n",
      "Loss = -499311.75\n",
      "Step #2700\n",
      "Loss = -502626.6\n",
      "Step #2725\n",
      "Loss = -501623.3\n",
      "Step #2750\n",
      "Loss = -502523.2\n",
      "Step #2775\n",
      "Loss = -501130.7\n",
      "Step #2800\n",
      "Loss = -498775.1\n",
      "Step #2825\n",
      "Loss = -498723.75\n",
      "Step #2850\n",
      "Loss = -499725.12\n",
      "Step #2875\n",
      "Loss = -498638.16\n",
      "Step #2900\n",
      "Loss = -501570.38\n",
      "Step #2925\n",
      "Loss = -497326.7\n",
      "Step #2950\n",
      "Loss = -493833.5\n",
      "Step #2975\n",
      "Loss = -496788.4\n",
      "Step #3000\n",
      "Loss = -500731.2\n",
      "Step #3025\n",
      "Loss = -499871.38\n",
      "Step #3050\n",
      "Loss = -493079.78\n",
      "Step #3075\n",
      "Loss = -500949.66\n",
      "Step #3100\n",
      "Loss = -502029.16\n",
      "Step #3125\n",
      "Loss = -506798.44\n",
      "Step #3150\n",
      "Loss = -499706.1\n",
      "Step #3175\n",
      "Loss = -503686.47\n",
      "Step #3200\n",
      "Loss = -500256.25\n",
      "Step #3225\n",
      "Loss = -501635.88\n",
      "Step #3250\n",
      "Loss = -498599.22\n",
      "Step #3275\n",
      "Loss = -499873.25\n",
      "Step #3300\n",
      "Loss = -501789.0\n",
      "Step #3325\n",
      "Loss = -500498.97\n",
      "Step #3350\n",
      "Loss = -493847.56\n",
      "Step #3375\n",
      "Loss = -506124.97\n",
      "Step #3400\n",
      "Loss = -497687.72\n",
      "Step #3425\n",
      "Loss = -505173.38\n",
      "Step #3450\n",
      "Loss = -496104.06\n",
      "Step #3475\n",
      "Loss = -505277.25\n",
      "Step #3500\n",
      "Loss = -497393.44\n",
      "Step #3525\n",
      "Loss = -502714.38\n",
      "Step #3550\n",
      "Loss = -496381.38\n",
      "Step #3575\n",
      "Loss = -501548.47\n",
      "Step #3600\n",
      "Loss = -499196.38\n",
      "Step #3625\n",
      "Loss = -501884.9\n",
      "Step #3650\n",
      "Loss = -500659.25\n",
      "Step #3675\n",
      "Loss = -502678.66\n",
      "Step #3700\n",
      "Loss = -500647.16\n",
      "Step #3725\n",
      "Loss = -500806.47\n",
      "Step #3750\n",
      "Loss = -504438.97\n",
      "Step #3775\n",
      "Loss = -502739.62\n",
      "Step #3800\n",
      "Loss = -498647.97\n",
      "Step #3825\n",
      "Loss = -499040.88\n",
      "Step #3850\n",
      "Loss = -499473.94\n",
      "Step #3875\n",
      "Loss = -501477.56\n",
      "Step #3900\n",
      "Loss = -502755.34\n",
      "Step #3925\n",
      "Loss = -499322.75\n",
      "Step #3950\n",
      "Loss = -500748.8\n",
      "Step #3975\n",
      "Loss = -499672.97\n",
      "Step #4000\n",
      "Loss = -497288.38\n",
      "Step #4025\n",
      "Loss = -505287.62\n",
      "Step #4050\n",
      "Loss = -503530.5\n",
      "Step #4075\n",
      "Loss = -499722.88\n",
      "Step #4100\n",
      "Loss = -500978.8\n",
      "Step #4125\n",
      "Loss = -503290.97\n",
      "Step #4150\n",
      "Loss = -499699.5\n",
      "Step #4175\n",
      "Loss = -504570.94\n",
      "Step #4200\n",
      "Loss = -501572.84\n",
      "Step #4225\n",
      "Loss = -500444.3\n",
      "Step #4250\n",
      "Loss = -504603.88\n",
      "Step #4275\n",
      "Loss = -501263.8\n",
      "Step #4300\n",
      "Loss = -502288.75\n",
      "Step #4325\n",
      "Loss = -496568.7\n",
      "Step #4350\n",
      "Loss = -497397.94\n",
      "Step #4375\n",
      "Loss = -498775.53\n",
      "Step #4400\n",
      "Loss = -501695.12\n",
      "Step #4425\n",
      "Loss = -503973.72\n",
      "Step #4450\n",
      "Loss = -500585.2\n",
      "Step #4475\n",
      "Loss = -500191.2\n",
      "Step #4500\n",
      "Loss = -502182.12\n",
      "Step #4525\n",
      "Loss = -501197.28\n",
      "Step #4550\n",
      "Loss = -498732.62\n",
      "Step #4575\n",
      "Loss = -499704.16\n",
      "Step #4600\n",
      "Loss = -498981.5\n",
      "Step #4625\n",
      "Loss = -499240.0\n",
      "Step #4650\n",
      "Loss = -499920.5\n",
      "Step #4675\n",
      "Loss = -501976.44\n",
      "Step #4700\n",
      "Loss = -500886.9\n",
      "Step #4725\n",
      "Loss = -496514.34\n",
      "Step #4750\n",
      "Loss = -499354.94\n",
      "Step #4775\n",
      "Loss = -500979.44\n",
      "Step #4800\n",
      "Loss = -498658.22\n",
      "Step #4825\n",
      "Loss = -497731.44\n",
      "Step #4850\n",
      "Loss = -500942.94\n",
      "Step #4875\n",
      "Loss = -499511.75\n",
      "Step #4900\n",
      "Loss = -500527.2\n",
      "Step #4925\n",
      "Loss = -502978.03\n",
      "Step #4950\n",
      "Loss = -504633.25\n",
      "Step #4975\n",
      "Loss = -502378.25\n",
      "Step #5000\n",
      "Loss = -502493.38\n"
     ]
    }
   ],
   "source": [
    "loss_vec = []\n",
    "batch_accuracy = []\n",
    "test_accuracy = []\n",
    "for i in range(num_epoch):\n",
    "    rand_index = np.random.choice(len(X_train), size=batch_size)\n",
    "    rand_x = X_train[rand_index]\n",
    "    rand_y = y_train[rand_index, :].T\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    \n",
    "    temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    loss_vec.append(temp_loss)\n",
    "    acc_temp = sess.run(accuracy, feed_dict={x_data: rand_x, y_target: rand_y, prediction_grid: rand_x})\n",
    "    batch_accuracy.append(acc_temp)\n",
    "\n",
    "    if (i+1) % 25 == 0:\n",
    "        print('Step #' + str(i+1))\n",
    "        print('Loss = ' + str(temp_loss))\n",
    "\n",
    "    if (i + 1) % 25 == 0:\n",
    "        randt_index = np.random.choice(len(X_test), size=batch_size)\n",
    "        randt_x = X_test[randt_index]\n",
    "        randt_y = y_test[randt_index, :].T\n",
    "\n",
    "        test_temp = sess.run(\n",
    "            accuracy,\n",
    "            feed_dict = {\n",
    "                x_data: randt_x,\n",
    "                y_target: randt_y,\n",
    "                prediction_grid: rand_x\n",
    "            })\n",
    "\n",
    "        test_accuracy.append(test_temp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7ff41c5e1908>"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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CyiXPffcE4Djjjsu40rMrCWbNm2itraW+vr6rEtpt6qrq+nXrx+dO3cu+jW5CYJ99tkHgNtvvz3jSsysJbW1tfTs2ZMBAwb4BI82iAhWrFhBbW0tAwcOLPp1uekaajxttLq6OuNKzKwl9fX19O7d2yHQRpLo3bv3Du9R5S4IfEGZWWVzCOyctrx/uQuCTp1y0xtmZlaUkgaBpOGS3pC0SNKNzcy/RFKdpLnpz9+XqpbGs4a8R2Bm2/PII48giddffz3rUsqiZEEgqQqYCJwJDAHGSBrSzKLTIuLw9OfnparHXUNmVqypU6dy4oknMnXq1JJto5Jud1PKfpJjgEUR8RaApPuBkcBrJdxmi9w1ZNa+XHfddcydO3eXrvPwww/npz/9aavLrF27lueff55Zs2ZxzjnncMstt9DQ0MANN9zAr371K3bbbTcuu+wyxo8fz+zZs7n22mtZt24dXbt25dlnn+Whhx6ipqaGn/3sZwB88Ytf5Prrr2fYsGH06NGDK664gmeeeYaJEycyc+ZMHnvsMT766COOP/547r77biSxaNEixo0bR11dHVVVVTz44IPccsstnHfeeZx77rkAXHjhhZx//vmMHDlyp9+XUnYN7QcsLRivTac1NUrSK5KmS+rf3IokXS6pRlJNXV1dm4px15CZFePRRx9l+PDhHHTQQfTu3Zs5c+YwadIkFi9ezNy5c3nllVe48MIL2bhxIxdccAG333478+bN45lnnmH33Xdvdd3r1q3j2GOPZd68eZx44olcc801zJ49m/nz5/PRRx/x+OOPA8mH/NVXX828efN44YUX2Hfffbn00ku55557AFi9ejUvvPACZ5999i5pc9Zfjx8DpkbEBklXAL8ETmm6UERMAiYBDB06tE03DXLXkFn7sr1v7qUydepUrr32WgBGjx7N1KlTefvttxk3btzWHoW9996bV199lX333Zejjz4agD322GO7666qqmLUqFFbx2fNmsVtt93G+vXrWblyJYcccgjDhg1j2bJlfOlLXwK2nfJ+8sknc9VVV1FXV8dDDz3EqFGjdlkPRymDYBlQ+A2/Xzptq4hYUTD6c+C2UhXjriEz256VK1cyc+ZMXn31VSTR0NCApK0f9sXo1KkTW7Zs2TpeeE5/dXX11i+j9fX1XHXVVdTU1NC/f38mTJiw3fP/L7roIu677z7uv/9+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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(batch_accuracy, 'k-', label='Accuracy')\n",
    "plt.title('Batch Accuracy')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(loc='lower right')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7ff41c546f60>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEWCAYAAABxMXBSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABx0klEQVR4nO2deZwdVZn+v2/ve3c2kpCFBAkOoIhsjoooKpsCUUFEHQRlVFRwGfdZFBiXcRllxkHBBYZxlDCC40QHZGRx+7GYEEJCRCCGkIUEOul0p9P77Xt+f9z7Vp9bXVW36i59b3fO8/nkk9t161adOlV1nvM873vOEWMMDg4ODg4OcVFT6QI4ODg4OEwvOOJwcHBwcEgERxwODg4ODongiMPBwcHBIREccTg4ODg4JIIjDgcHBweHRHDE4eDg4OCQCI44HGYsROSA9S8tIkPW3+8s4Hi/FpG/jrFfW/YcdxZWcgeH6kZdpQvg4FAuGGPa9LOIbAX+2hhz9xSc+nxgBDhdRBYYY3ZPwTkBEJE6Y0xqqs7ncHDCKQ6Hgw4iUiMinxGRP4vIXhH5LxGZnf2uSUT+M7u9V0TWiMh8Efki8Crg37Jq4t8iTnEJcD2wAfgr37lPEZH7s8feLiKXZrc3i8g/i8gzItInIr/PbnuNiOzwHWOriLw++/kqEbktW+b9wKUicrKIPJA9xy4R+TcRabB+f4yI/EpEekTkORH5WxFZICKDIjLH2u94EekWkfpi6tth5sERh8PBiCuBNwGvBg4F9gHXZb+7BOgElgBzgMuBIWPM3wG/A64wxrQZY64IOrCIHAa8BvhR9t+7fN/dCXwLmAccB6zPfv114ATgFcBs4FNAOub1rARuA7qy5xwHPgbMBV4OvA74YLYM7cDdwC+z134EcE9WFf0auNA67sXAKmPMWMxyOBwkcMThcDDicuDvjDE7jDEjwFXABSJSB4yRIYwjjDHjxpiHjTH7Exz7YmCDMeaPwCrgGBF5afa7dwB3G2NuMcaMGWP2GmPWi0gN8B7gI8aYndnz3p8tWxw8YIz5mTEmbYwZypb5QWNMyhizFbiBDEkCnAPsNsb8szFm2BjTb4x5KPvdzWQVkojUAm8Hfpjg2h0OEjjicDgYcRjw31krpxd4nEwvfT6ZhvIuYJWIPCsiX01o1byLTK8fY8xO4DdkVAxkVMyfA34zF2gK+S4Ottt/iMiRIvILEdmdta++lD1HVBkA/gc4WkSWA6cDfcaYPxRYJocZDEccDgcjtgNnG2O6rH9N2d7+mDHmamPM0WRso3OYsJsip5IWkVcAK4DPZhvt3cDLgHdk1cx24AUBP90DDId8NwC0WOeoJWNz2fCX6zvAn4AVxpgO4G8Bsa798KDyG2OGgf8iozouxqkNhxA44nA4GHE98MVszAERmSciK7OfTxORF2cb6P1krCuNNTxHSKObxSXAr4CjycQvjgNeBDQDZ5NRIq8XkQtFpE5E5ojIccaYNHAj8A0ROVREakXk5SLSCDwJNInIG7PK5++BxjzX154t+wER+QvgA9Z3vwAWishHRaRRRNpF5GXW9/8BXAqchyMOhxA44nA4GPEvwGrg/0SkH3iQjDIAWEAm0LyfjIX1GyYa0H8hEwvZJyL/ah9QRJrIBJa/ZYzZbf17Ovv7S4wx24A3AB8HesgExl+SPcQngI3Amux3XwFqjDF9ZALb3wd2klEgOVlWAfgEmXhKP/A94Fb9whjTT8aGOhfYDTwFnGZ9///IEOU6Y8wzec7jcJBC3EJODg4ONkTkXuDHxpjvV7osDtUJRxwODg4eROQkMnbbkqw6cXCYBGdVOTg4ACAiN5MZ4/FRRxoOUXCKw8HBwcEhEZzicHBwcHBIhINiksO5c+eaZcuWVboYDg4ODtMKDz/88B5jjH/c0MFBHMuWLWPt2rWVLoaDg4PDtIKIBKZkO6vKwcHBwSERHHE4ODg4OCSCIw4HBwcHh0RwxOHg4ODgkAiOOBwcHBwcEsERh4ODg4NDIjjicHBwcHBIBEccU4jf//73PPbYY5UuhoODg0NRKCtxiMhZIvKEiGwWkc8EfH+qiKwTkZSIXOD77pfZpT1/4dv+7yLytIisz/47rpzXUEp86EMf4pprrql0MRwcHByKQtmII7uC2nVkVj47Gni7iBzt220bmdXGfhxwiK+RWb4yCJ80xhyX/be+NCUuP0ZHRxkZGal0MRwcHByKQjkVx8nAZmPMFmPMKLAKWGnvYIzZaozZwMTSnPZ395BZwWzGYHx8nFQqVeliODg4OBSFchLHImC79feO7LZS4IsiskFEvpldl3kSROR9IrJWRNZ2d3eX6LTFIZ1OMz4+XuliODg4OBSF6Rgc/yzwF8BJwGzg00E7GWO+a4w50Rhz4rx5kyZ3rAic4nBwcJgJKCdx7ASWWH8vzm4rCsaYXSaDEeAmMpbYtMD4+LhTHA4ODtMe5SSONcAKEVkuIg3ARcDqYg8qIguz/wvwJmDa5Lem02mnOBwcHKY9ykYcxpgUcAVwF/A48F/GmE0ico2InAcgIieJyA7grcANIrJJfy8ivwN+ArxORHaIyJnZr34kIhuBjcBc4AvluoZSwykOBweHmYCyLuRkjLkDuMO37XPW5zVkLKyg374qZPtrS1nGqYRTHA4ODjMB0zE4Pm3hFIeDg8NMgCOOKYTLqnJwcJgJcMQxhXDjOBwcHGYCHHFMIZzicLAxMDBQ6SI4OBQERxxTCBfjcFCsW7eOzs5OtmzZUumiODgkhiOOKYTLqnJQ7Nixg/HxcbZu3Vrpojg4JIYjjimEUxwOCu1A7N+/v8IlcXBIDkccUwinOBwU2oHo759RE0A7HCRwxDFFMMZgjHGKwwGYUByOOBymIxxxTBGUMJzicICJ58FZVQ7F4EMf+hC//e1vp/y8jjimCOl0Zq0qpzgcwCkOh+KRTqf59re/zf/93/9N+bkdcUwRnOJwsOFiHA7FQpehrkRn1BHHFMEpDgcbTnE4FAtHHAcBnOJwsOHScR2KhSOOgwB6c6tRcWzbto3f/e53lS7GQQVnVTmE4fHHH+fhhx8O/f5///d/2bdvnyOOgwFqVRljvM/Vgq9+9atceOGFlS7GQQVnVTmE4W//9m95//vfH/hdf38/5557LjfffLNHHJVwMRxxTBHsXkG1qY7+/n7XgE0xXDquQxgGBgbo7e0N/O7AgQMYYzhw4MDMVRwicpaIPCEim0XkMwHfnyoi60QkJSIX+L77pYj0isgvfNuXi8hD2WPeml3PvOph39xqi3MMDw8zPDxc6WIcVMinOG677Ta+9KUvTWWRZgzGxsZ4+9vfzmOPPVbpohSEsbExDhw4EPidvqfDw8MzkzhEpBa4DjgbOBp4u4gc7dttG3Ap8OOAQ3wNuDhg+1eAbxpjjgD2AZeVqszlhG1PVZviGB4edlO+TzHyxThuv/12vve9701lkWYMnn32WVatWsUNN9xQ6aIUhNHR0VDiGBoaAmYwcQAnA5uNMVuMMaPAKmClvYMxZqsxZgMwyfQ3xtwD5LxVIiLAa4HbsptuBt5U+qKXHtWuOOz/pxJjY2NVF/OZCthZVcaYSd+Pj48zNjY21cWaEdC6veOOOwLrttoxOjrKwMBA4Huh7+jIyMiMJY5FwHbr7x3ZbcVgDtBrjNGWtxTHnBJUu+Kw/58qGGNYvnw53//+96f0vNUAbdzS6bTXi/R/74ijMOj7tWXLFp566qkKlyY59L4HLfQVpDhccLyEEJH3ichaEVnb3d1d6eI4xRGAdDrNzp07eeKJJ6b0vNUA+3kIsquc4igc9vt15513VrAkhWF0dBQg0K46GKyqncAS6+/F2W3FYC/QJSJ1+Y5pjPmuMeZEY8yJ8+bNK/K04di9eze//vWv8+5XzVlV9sM4ldB66Ovrm9LzFoMtW7awZs2aoo9jN25hxKENiEMyVBtx/P73v2fnzvhNn3YYgojjYLCq1gArsllQDcBFwOpiDmgyhuV9gGZgXQL8T1GlLBLXXXcdZ599dl4v1baqqlVxBFkm5cR0JI6rr76aSy65pOjj2C97UEqus6oKh75f8+fPjxxIN1V4y1vewje+8Y3Y+x/UiiMbh7gCuAt4HPgvY8wmEblGRM4DEJGTRGQH8FbgBhHZpL8Xkd8BPwFeJyI7ROTM7FefBv5GRDaTiXn8oFzXEAeDg4MMDw8H+pE2qllxVMqqmo7TbgwODpaEYOMoDkcchUHrtrOzsypU2+DgYKJxUlrmoN9USzpuXf5dCocx5g7gDt+2z1mf15Cxm4J++6qQ7VvIZGxVBfQh7e3tpa2tLXS/aguO33777Tz11FN85jOfqRhxTEfFkUqlSqIY88U4UqmUt/BXbW1t7ON+8Ytf5MUvfjHnnXde0WWcrtD709LSUhXEMTY25jXycfeH+IrDBcenIfSm7du3L3K/aguO33rrrVx//fVA5RTHwUwc9jGCFJfWTdKG77rrruO2227Lv+MMhtZtc3NzVai2VCqViDjiWFUzOcZxUEBvWtgUAf79/J8rheHhYQYHB73P9v/FIu4SudNx2o2xsbGS3L9UKkVNTeb1C7Oq9HxJMDw8XBWNZSWhddfc3Mz4+HhFxwml02nS6XTJiKNarCpHHEXCtqqiUG3B8ZGREQYGBnK89FIRxwc+8AHe8pa35N1P6+FgVBzj4+N0dXUB4VYVJCeOoaGhqrBnKgnbqoLkdVhKaKNeiFUV9FzM+OD4wYJCrKpqUhx2oLdUxLF161Y2btyYdz+th4GBgaog0zgopVXV0dGBiERaVUkaPWMMw8PDjjgsqwqS233lKEtc4rAVkrOqZjDiKo5qi3EoSdiEVyriSKVSxBl0mS9AXI0YGxsrmeJoaGigra0tUnEkafS0ITnYrKqnnnqKDRs2eH/7iaOS9ZH0Ptr7OatqBiNujKPasqr0oevp6fG2lWoch87umY+I7HqYLnZVKpUqWYyjtraW9vb2ksU49P4dbIrjE5/4RM76FdVIHHEVh11Wl1U1gzHdFcfevXsnbSsWen35VIddD9OJOEqlOOrq6kpKHHr/DjbieP7553PGUfljHNPJqrLLWs3jOBxxFIm4MY5qUxz6ANqKY6qJI9/o6WqEzuZbbKaOrTjCRo7r+SDz/Hzwgx/MsWT80N7owWZV9fb25pD5waA4RkZGvPfVEcc0hFMck1EIcUwnxQHFv6ypVIq6ujpaWloCLUK/4tizZw/f+c53uOuuu0KPebBaVX7isNNxYfoqjijigAlF4ohjGqIQ4ohzo8ude64P8lQShzEmZ06vShFHMWs06LUVS/5qVdXX1wf2iP1BVVUlUb3ng9Wq2rdvX6DiqIZ03FITh/2O6jPhiGMaQm9aEqsqqNHZvXs3LS0trFmzhr6+Prq6urjjjjsm7VcqlNOq0hfVTxxf/vKXOemkk7y/842eLheOPfbYRJPO2dBrK4XiqK2tDSUOv+LQ3mUUKRyMVpV6/VFW1XRSHHGtKpjobLng+DREqRTHs88+y9DQEFu2bGHPnj309/fzq1/9qqRlVWi+P0yt4nj00Ud58sknvb8roTiMMfzxj39k69atBf1+qhVHIcRxMCkOfe/sOpzOMQ69d62trZHBcZh4Z5zimIYII46BgYEcPzqf4rAbJP38yCOPlLq4QO6LVI503DDi6O7uzjlHJYhjaGiIdDpd8MtWKuJQxdHQ0BDY0IcpDmdV5UKV/nQJjq9bt47t27eH7q/3bvbs2bEVhyOOaQh72gz7Bl5//fWcddZZXo8+n+LQh9smjvXr15dlzWS716Lla2lpKbvi6O7uzrm+SmRVFRtQnCrF4Z/kUOvHWVW50A5bVIyjGqyqVCpFOp3mbW97G9dcc03o/nrvZs2aFUocel2OOKYxwhq/tWvXAhPrBufLqrKtCX14+vr6CrZUomAThCqOrq6uKSEOmGjgKjGOo9iA4lTFOAqxqg5GxRFFHNWkOCCjOnp7eyNnSbAVx+Dg4KTnbHh42JvjrFQZfoXAEUeRsB8M265Sm0klar5xHEGKwz5OKRGkOEpJHEHB8XQ6zZ49e4AJ4qiEVVUtikPTcZMGx6MaQac4MqhkOu4DDzzAZz/7We9v+16MjIwwODgYGe/Q/efMmQMwaYG4oaEhjzgULjg+DZFKpRARYOIhPnDggBcEDhrdGXSj9YGxFQeUhzjsB7ccxBGkOHp7e7060Onc9e+GhoaD1qoKi3H4FUcSq+pgUhwa4wgKjlciHfenP/0p//RP/+RZzPZzohOLRhGH3rtZs2YBkzOrhoaGvO8UTnFMQ6RSKWbPng1MPMQbNmzwHpwg4gi60UHBcSi/4tCylIM4ent7A9WHX3HMnj172igOWxkWg7jpuP5lROMExyu9BsVUQjtr4+PjkxrrpqYmYGqJVDtFQc+JPuNxiEPbFJs40uk0o6OjM584ROQsEXlCRDaLyGcCvj9VRNaJSEpELvB9d4mIPJX9d4m1/dfZY67P/juknNeQD+Pj48ydOxeYeIjtxj7IqoqrOBYvXhw5xUSh8BNEbW0tbW1tJSWO9vZ2YELRBBGH1sNUEof23AtpWO2pRop9WaOC4/ZCWIWk49q/m6745S9/ybx58yZZNX7Y9rDWWSqVWSSrsbERmNq6sKcE0bIotKxxrKog4tD3029VzSjiEJFa4DrgbOBo4O0icrRvt23ApcCPfb+dDXweeBmZ9cU/LyI2zb7TGHNc9t/zZbqEWEilUsybNw+IJo5CFMeiRYvyDiwsBP4Ht6mpiaamppISx4IFC4AJwsinOKaDVVXKaWOiFIdNaoVYVfn2mw546qmn2LNnT066eBDs98N+h5SUoTKKQ98l+znRshaqOA4K4iDT4G82xmwxxowCq4CV9g7GmK3GmA2Av/t3JvArY0yPMWYf8CvgrDKWtWCkUikvkKUPxiOPPEJHRweQXHGkUqmclLyBgQEvsPzQQw+VpMx+gmhubqapqSnWOI5HHnmEnTt3hn5vjCGVSrFw4UIgPnH09fWVJfVYcf/999PT01MUcQT56IXCH+MIm4qlkHEcMLmxfOKJJ3jqqaeKKvNUQsufb+CcrTj8xNHQ0ABMreJQ4ghSHIUQh52Bpe/NTLeqFgH2SJcd2W2l+O1NWZvqH0Qj0z6IyPtEZK2IrI2zqFChSKVSzJo1i66uLu655x42bdrE+vXrOfXUU4H4isO2qvRh6+rqwhjD4OAg1157La9//etLUmZtYPTFSqI4LrjgAj73uc+Ffq/XFoc47OscHx8vmeLxI51Oc9ppp/Gtb32rqHTcoJTPQuHvFYepmVJZVR/60Ie48soriyrzVELLn08t2MRhd77sup1OxGF3GiFXcej9dVlVheGdxpgXA6/K/rs4aCdjzHeNMScaY05UK6kc0JXc/u7v/o4777yTlStX0tHRwac+9SkgflaV3VsKenj27NnDgQMHSvISaAOtvZqmpiaam5tjNdy9vb2RikOv49BDDwWCicOfVVXufPuRkRFGR0fZuXNnUYojKOWzUNhWFeReu33sQgYABu3X398/baauh8KIwx7XUCmryl5oyS4TxItxaFn9joV9TJs4GhoaZpzi2Akssf5enN1W1G+NMfp/P5nYyMlFl7QIaO/mwx/+MEcccQR//vOfueqqq7yGM+k4Dltx2MShDZ42usVAy2QTR1NTEyMjI3ntosHBQW88RhC07PPnz0dEcoijtrYWmGxVlTv7Ra+3u7u7bFbVAw884CmxDRs28MlPfjKyLv2NW9ixS2VVjY2NlU3RlQN6nfmsqqgYx3S2qpQ47HsWpDhaW1tJp9NltXmDUE7iWAOsEJHlItIAXASsjvnbu4AzRGRWNih+BnCXiNSJyFwAEakHzgEeK0PZY8Oec+jmm2/mAx/4AB/84Ae9jI5CFEcQcWhvsRTEoQ+jxmaUOOzyBiGdTjM8PBy5zoaWvbGxkdmzZ+cQx+LFi4HJxFFuxaHX293dXTaratWqVXz5y18G4Be/+AVf//rXI++V/dxAbkMfFeMo1KoaGxuLPdFeNSCJ4tB3zX6HbDVXieB4sVaVZiXa91Q/d3R0eGPHdKzKVKdfl404jDEp4AoyJPA48F/GmE0ico2InAcgIieJyA7grcANIrIp+9se4B/JkM8a4JrstkYyBLIBWE9GhXyvXNcQB9q7AXjFK17Bt7/9berr6ycRRxLFoZ+1Z2ErjnzpiXEQZFUpcUT1SvXBjSIOLXtdXR3z5s3LIY6lS5fmHMc/NUS5XnCbOEplVfmJo6enh1QqhTEm516GIUpxFEoc+RRHUIPlXyOlWqDlj7peYwy9vb1eVqNfcdTU1FBbW1sRxVFsVpUSh31P9bMms8AEcUy1XVXWGIcx5g5jzJHGmBcYY76Y3fY5Y8zq7Oc1xpjFxphWY8wcY8wx1m9vNMYckf13U3bbgDHmBGPMscaYY4wxHzHGVHQdVm0A/NCeZNKR47biUOLo7+8vq1VlP4hxiGNoaIiBgQHOO+88PvnJT+bso2WPQxyVUBxaj4X00KJiHJo2aseoooKWUTEO+3ejo6OMjo569yzOlCP6OxthVtUnPvEJzjjjjNBjlhL9/f0ccsgh3HPPPXn3jWNVHThwgPHxcY84/MFxgPr6+mmnOOrq6rx3Isiqsjt6ShxTHSCfjsHxqoL9kNqIsqryjeMICo6rxVJJxWGTVnd3N/fffz9PPPFE4HXYxGGMobu7m0MPPZSamprQGEc5g+OQeXG1gS91jEMHOtqKsVSKw07JzGdVhQ16C1Ic6XSaH/3oRzz22NS4vbt376a7u5tNmzbl3TeOVaXBZh2A61cckOnAVdsAwPHx8dDnb3R0lPr6eq9TcVAqjoMB2nP0w684tIcrInlHjpc7OD48PIyIeIrGJo6osRz2uZ955hn27t076cXWstfX13vE0d/fz+joKPPmzctZY3uqJqOzXz6dbbgcVhXkEkc+xWEHcO1r9wfH9d7X1dXl7Ld//37uv/9+7+/h4WEvqBrHqlq/fj3PPffclGVb6X2Pc744iiMOcYRN6WKX6Te/+U3+wofg17/+tXdd6XQ6MqvKDuSHXdfo6Kj3TPgzHfXYzc3NXgfBEcc0hGYzBCmOmpoa6uvrJymOsPS5fIqj1DGOxsZGWltbgcIUh46O97+UtuKYO3cue/fu9dJ358+fT3Nzs3ccf4yj3FYVBM/MGxdJiSPseowxpNPpWOm4Y2NjXkM7e/bsnP1uvPFGXv3qV3vXNzQ0FEkc/nt75513AgRO310OaN1HTSuuiBPj0HrR98Sfjgv5rapVq1Zx2mmnRcbtwrB9+3ZOO+00br31ViD3OYuyquzv/RgbG8sZX5XPqtJ32BHHNILerCDigIxdFUQccRWHKoLe3l6vsS1VjKOpqcnrreg4DohPHA8//DAw+cX2W1XpdJo1a9YAcMQRR9Dc3FyxdFwbpbSq0ul0ziyt+YjDfm7ijOPQhnbOnDk5ddTf308qlcqJPXV2dgaeW8tlx3aUOCB4fetSIwlxxLGq/B2PQqyq3t5ejDEFTe2zY8cOAC893X4/gojDno8tSnHoM+GfzcFZVTMEdiMZBJs49IVNojhaW1upq6tj165d3n6lUhxNTU2JFYf9EK9btw4IbqBggjgAz05ZsWJFIHHYiuPxxx/njW98I2eccQb/+7//W9yFZhF0TaUcANjX1+fd3zhWlW6PExy3rSo/ceh++oxFWVX+Hvy+fft44IEHvPFGcRrzQjAyMsLll1/O7t27S25V+Tse/nRcyK849NmIQ5w//elP+cEPfuD9re+l1p39fuRLZohjVUUpDr9V5YLj0whJiGN8fNxLD4yrOOrr62lra8shjlLFOBobG72HLm5WlX3uP/3pTznlVvgVB2QGx3V0dDB37txI4hgdHeXuu+/mjjvu4N577/UsgGJRDuKwP9sT8ZVacdhW1Zw5c3L28zeutlUVRuhaF1u3biWdTvOqV70KKN/SvRs2bOCGG27gvvvu856fUisOf3JFEsWh9RGnTN/97nf55je/6f29e/funN/a74c/xuGPg0ZZVbbi8AfHRYTGxkanOKYzwh4KhV9x1NTUUFdXF2sFwNraWkSE9vZ2nn32WW+/UigOtaqKiXFoDztfcBxg48aNrFixAhHJIY6gGIce75BDDimZdVUq4ghTBTZx2OnU+RRH0uD4nDlzctbasBXH+Pg4Y2NjnlVlH8+epl2fR72X8+fPB8qnODTbbHBwsORWlV5T0ADAuDEOLVMcxTE8PJxjN2mHLmhwrm1V6XNvo1DF0dTUhIg44pjOSBrjqK2tDVUcfqtKj1kuxeGPcSQhDk3jhXiKwxjDihUrAAKzquwUUq2v9vb2ko109h+npqam6HEc9mdtHCGZ4ogbHLeJw97XVhx634KsKvvYtjqB8hOHkurAwEAiqyrO7LhRVlVSxVEIcUQpDps46urqvGfc/70fUcQxMDDgEZALjk9jFGJV5VMcalVVijii0nH1u8MOO8zbFhUc1zRJyATGgUlWlX9qCD1eW1tbyRWHNrydnZ0ljXGEWVVxFEec4LidVaXb7OOMjIzkTEfhP5792c7AggniKJdVpXVTDsVhT29j/50kHTcpcfT393udjrhWVRLisK0qfzruM888w5IlS3Ku2SmOaYikwfEkikMfnra2tpz9qyEdV0eAQ3RwvLGx0WvIVHHY6bhBg+A0q6SxsTERcTz77LM8/vjjodcLeC+dTuOeFHGsqjiKo5DgeHNzs9dIaL2UQnEcckhmAc1iFMcTTzzB9u3bA79TNWYrjiTEUYjiSJKOm5Q4YKL8cYLjqVQqZwoitbULURybN2/23iNnVU1jJIlxaO+6EMWhqKmpKWk67oIFC2hra+MFL3hBwcQRpTgAz64KUhway7F9/pGRERoaGmhoaEhkVf3DP/wDF154Yej1QvHEUWqrKizGYScNKHG0t7dPmu01SnFMpVX1jne8Y9LUMwpbcejzkySrqpqC47qv2lWqOPLFOGzFoWNO4o7jsN+VLVu2eO+Rm3JkGiNpjCNOVpVfcehkZ0CsNZjjQK2qrq4uenp6OP300wMbMD8GBwdpbm72eqkLFiwIjXFo+ZU4bMURZlWp4mhsbEysOPr6+nLWZvBfb21trbec7axZs6Ykq6rYdNympiaPODo6OibN9hpEHEHjOKKsKr2XxVhVu3fvDl3iNSjGoataRiHOAMCo4Hg50nFt4kin0zz33HPAZKtKREKtKh2bFXcchx7nmWeeIZVKee+Rs6qmMQqxqsIUhx4rSnEsWLCgpOm4kHmxRCQRcSgZvOAFL4gMjkNmOojOzk4v3hFEHPa5VarrkqpxETQy2r7epqYmr9ylUBxxYhzFpuM2NTV5MQ5bcZTCqtLnqKuri7q6uqIUR29vb2hsLCirCvI31HGsKr/iKCQ4niSryg7u7927l1QqRU1NzSTi6OzsLFhxhFlVmzdvBphkVWmwfKqJI7jFc4iFpMHxqBhHmOJQ4qivr/fWIC8WalXZ0LJFvahDQ0O0tLRw+umn87a3vY358+d7o8IV/jq5+OKLednLXpazfoAtv/2Np1pVdt3FgZ2RFXa9K1euZM+ePZGTzOU7h/86IdM4iog3pXqxwXE7TTmpVdXa2kpNTU1sq6q5uZmOjo6CiWN0dHQSKdiwFYeWHzKNr5JcEKYqHbdQxaE21bJly7wR5Paa4KWyqvScul68WlXnnHMOY2NjnrJyimMaoZTjOOyHPkhxdHR00NLSUtKsqqDy5lMcLS0tHH744axatYqOjg7GxsZy1nOwg+MAF154IX//93/vfd/c3Oxdo19x2FZVIYoj7GVUhXXyySdzww03UFdXV9J03J6enpxU2STpuHFjHEFWld0rt4nA38sOs6pqampoaGigvb29YOJQezAfcfjJJd/5ih05XuoYRzqd9uq9r6/PC4y/8IUv9JSyreLCrKo4iiMoq2rz5s20tbV5duupp57KN7/5TUcc0xHlUBza8PgVR3t7O62trbEVx8aNG5k3b57XG7IRRhz5AtJKHPb+9uAyyF8nKq2HhoZC03ELtapGR0cDCcF/vTU1NYEv2kUXXcRnP/vZ0HNEEYcGmUuZjqvEEWZV2YpDG5impqZJvewwxdHc3OwNMi00xhGXOOwYB8QnjkKC4/myqm677TaOPPJIUqlUbMVhvxf79+/3FIdaR/39/QwODnpp7mGKI06Mw1Yc+kw/9dRTHHHEEZ5yVyhxuOD4NEIhwfG4I8f1mBocb29vT6Q4Hn74Yfbs2eNJXBt2jMNGvsZaYxyKKJtFv/NDf68zsgZZVRocT2pVQXBD4yeO2trawHuwYcMG1q9fn/ccMDnGocRhjxwvNh1XGw61qvz7RimOuMQBFGVVRRGHPfmjnVUF+YPxxQbHo8ZxPPjggzz11FPs378/NnHY8TNbcRx55JHe9WjHyn52C7Gq7OC4nluJw4+qVRwicq6IOIIJQDnGcWhw3K841KqKqzi0R2SPdIXMKO6gGIeWN45VpYiaLiOO4tDsFxHx1pqIoziMMfz6178OtMhGRkbo7u7OWZxIyUgRRhzj4+OR9RukOLRxDFIcxQbHw2Ic+RRHXKtK70WQVdXb2xtJogolhiDisCd/VMWhWV+lsKoKDY7ruzEwMFAwcezevZv29nbPOlLFoWtlFGNV2YpDy/b000976saGXmfVEQfwNuApEfmqiPxFkoOLyFki8oSIbBaRzwR8f6qIrBORlIhc4PvuEhF5KvvvEmv7CSKyMXvMfxW/dptClGMcR9CUIzBhVcVVHP55dOwyp9PpgqwqDY4ronrLSawqPZYdHI8qywMPPMBpp53Gb3/7W2+blmF4eJgvfelLnHbaaR6xxFUc4+PjkQ2IfW36uaenh3Q6zcKFC71yJLGqtJ6CyFc97sHBQTo6OiKzqmzF4bdn7M92VpVNHP7n5Nprr+XVr351aF0oVHEEPZdqU9XV1XkxjrjjRooNjkel4+q7ceDAgYKIY//+/Tz77LMsWLDAcwT6+/u996OpqSlUcShxJiGOLVu2kEqlWL58+aT9q1ZxGGP+Cngp8Gfg30XkARF5n4i0R/1ORGqB64CzgaOBt4vI0b7dtgGXAj/2/XY28HngZcDJwOdFZFb26+8A7wVWZP+dle8ayoW4ikMX7okax5EvHde2quIEdsMUh90z9SOOVRWkOIJ6t2F1or/3E4eeO844Dk1N1Gu0zzsyMkJPTw979uzx1klIQhxRikPP0dTU5N0vHTF9+OGHe/skCY6LyCQ7xQ766v0Ksqq0DHZgtqWlpSRWVXd3N/v3789RdUFQ4hgbG5tUp5qKu2jRIk9xxB03koQ4ilEccUez24qqr6+P7du3s3TpUi8zTBVHPquqtbU1slMUZFUp0WkCho2qJQ4AY8x+4DZgFbAQeDOwTkSujPjZycBmY8wWY8xo9rcrfcfdaozZAPhbwjOBXxljeowx+4BfAWeJyEKgwxjzoMk80f8BvCnONRSCq6++mr/5m78J/T5OjMMYk5NBFFdx+AcAdnR0eFOERI3uVoQRhz6wQTEOu7H+whe+wIYNG3K+D4txFGpV+YOYGuBWxaHqyA9trO0Bf0FjGpRg/NZcGHGkUqlYVlVTU5P3+yjiiKM47GtX+KebB/KO41DiSJJVFWVVaQ88XyfFvgd+u0oVx+LFixMpDk1r1mtT3HTTTfz85z/3/o4zcjxIcSSxqn7wgx9wyy23TLKqtm/fzpIlS7z30x/j0P3VPbAH7AXF71atWsWqVasCFYeWV20uG2HB8euvv55777038JpKgTgxjvNE5L+BXwP1wMnGmLOBlwAfj/jpIsCewGZHdlschP12UfZz3mNmVdFaEVlbyLKQkAkw33fffaHfx1EcMDHtddy5qqIUB8SbryrMqsqnOEZGRkilUvzDP/wDP/nJT3K+9yuOYoLjdoxDz+0fxwHBPc5t27YBwcQxPDzsNWCaGOBPBigmxqGDJUulOGAycfgbRCDHqgobx9HQ0ODFTeIoDr2XShy2utCGNCqVFXKXQw0jjiVLljA0NMSBAwe8AYdRisN+P+zr+PrXv87Xv/5172+tRx3EGqY47KnoVZFC5vkZHx+nvr7e68jY+NOf/sTll1/Oddddl0McPT09PPvssznEYcc4oqwqjYH4ieNrX/saX/rSl0ilUjlrjsMEcWhGlo0wxfGlL32JG2+8cdL+pUIcxXE+8E1jzIuNMV8zxjwPYIwZBC4rW8mKhDHmu8aYE40xJ+qI4aSwRzkHIU6MAzIPa9z1OPKl40K8GXILsapUceg+/kbbH+MoJjiuWVV+L9oexxFUBphorO1GK8jvt4nDn44b1JPOF+PQ3qMd49i2bRsNDQ0sWrTI2yep4vBbS2GKI2rKEVsNRimOIKuqvb0dY0wOaWo95EvzjFIcalXpHGE9PT2xBhwGlVc/21mC9vtn3xO/krWPqdOE2OXTWQ30+jWB5OMf/zipVConFtLe3s7jjz9OOp1myZIlOVaVvh9RVlWY4uju7uaJJ57IKbPfqgoijrDguM77Vi7EIY6rgD/oHyLSLCLLAIwx90T8biewxPp7cXZbHIT9dmf2cyHHTAybOL7whS9w/vnn53xfSsXhf1n0mBpMmzVrVmzFMTAw4L2Y/p6dEop/YRmYUBxBxGGMSaQ4kgbHtbGzrSp/GRRBVpW9foPfqgqKccBkG0bVXpivro2AfQ+3b9/O4sWLc9RAkOJ44xvfyBe+8IWcOsqnOJJaVXpvohRHkFVlN36KMOL41a9+xWGHHZbTa1eEKQ6bVFtaWvIOOLTL6w/s79q1yyvb+Pg4IuJ1yMLSce1j2ksU+IlDy3TBBRfQ1NTEHXfcQVNTUw5xzJ8/3/vd0qVLvY5dmFWlGZJRxGGMobu727tWv1UVRRxhisNeoqAciEMcPyE3BjGe3ZYPa4AVIrJcRBqAi4DVMct1F3CGiMzKBsXPAO4yxuwC9ovIX2azqd4F/E/MYyaGPQX4unXrJqUnxolxwARxxBk5DpkXUB/4rq4uVq9ezaWXXuo1DPkUhx00thWHMYarrrqK2bNnc9ppp036nfZ89aG2H259EezGLCo4XlMT/GhFxTjs2XHtuvMjyqoKUhxB6bgw+WXTv8OIWRsB+x6q163XEUYca9eu9fx5/3MTFRxX5LOqbOKIExz3Z1VBLnHoZ79VtWnTJrZt28Zdd90F5LeqOjs7c6YWaW5uzjvgMIo4AP785z8DucpCiSOdTmOMyVFz9jHtd8NPHEpImzZt4sUvfjHf+973eMc73jGJOBR635ubm3OC42pVaXzTrzj8wfHBwcEcK8yvOHbv3o2IeJ1IG1HEUWnFUZcNbgOQ/dwQsb/ulwKuIEMCjwP/ZYzZJCLXiMh5ACJykojsAN4K3CAim7K/7QH+kQz5rAGuyW4D+CDwfWAzmUyvO2NdaQGw51VSa8VGEsWRbxyH/bIMDQ3lHPPcc89l1qxZnlWVT3Hoy1FTU5NDHKtXr+aee+7h6quvzlnFzy5vmFVlZ+0owoLjdXV1k0a4KuysKn/apH/KEf+xIdOz00YnLMZhKw5jTKjiKIQ4gqyqpUuXUlNTQ01NTU4DYN/n4eFhNmzYkDNAMGlwPGrKET9xBJG5iIRaVZCrTsMUhz4Hd96Zee16e3u9ToK/Q7N3717mzJnjPbd6TWFW1cDAAOvWrfOuz98z18/aIbCfn7q6Oi8jEXLVHGSsoEcffTRHcWjWnZ84RkZGOO644/jrv/5rZs2alUMcmhUGExacXo89jgNyMySjYhz+GGxQcLyjoyOwM1bNxNGtDT2AiKwE9sQ5uDHmDmPMkcaYFxhjvpjd9jljzOrs5zXGmMXGmFZjzBxjzDHWb280xhyR/XeTtX2tMeZF2WNeYfLlCxYBtarUpvG/REliHPmyqjTwCrmKw0ZcxaEvx+GHH57TGFx//fUsX76cyy+/PPB3fqvK3yuyywDhVlUYkUK0VeUfAAiTicNeMChfjKOvr489e/bEJg69n2FxDn+MY3x8nJ07d3oNiAZZ/WXS6x0eHubJJ5+cFBz3K4Sg4Hi+AYB2/CnMqmpra0tsVfkVhz4Hv/zlL0mn0/T29nqNqV9x7Nmzhzlz5uQ8M6o4gojjO9/5Di9/+cu97/yrQPqJw69Yg0hZ6+zLX/4yJ598shdHEBGPODQGahOHvrttbW0MDAxMWqO9s7MzZ1YHv1UFmc6Cvg/Lli2jvb2duXPnFkQcQTYVBGdVaVZapa2qy4G/FZFtIrId+DTw/rKVqIrQ3NxMOp1mbGwskjjiKo5863HYjWrQMZMqjhe+8IU5imPr1q0cf/zxoeX1W1X2g6eNQpzgeFhGlf83UQMAw6wqtamWLFkSaVXpgLwnn3wyMB0XirOqUqkUu3fvZnx8PJQ47GCtlu+RRx4pOh03aMoRf3A8jDjCsqogXoxDG9Du7m4efvhhent7OfTQQ71j2tD4T5DiCLKqnnrqKUZHR7372tra6l2HBqxhInblVxxhas4+9qpVq5g3bx6tra2hMQ47C09jGEoySpL2YmZKhPYAQMDLUKyrq+Pcc8/1lEM+4rAnOdTrDErFheBnOc6o+2IRZwDgn40xf0lmEN9RxphXGGM2l61EVQS7IVdrxUbSGEe+cRx6vuHh4cBjJlEctbW1LF++3CMOY4znx4chjlUVZ66qKMXhJw5/ZlGQVXXzzTd71ogqjmOPPdZrYNLptBfoVqvq2GOPBTJ+tV6bolirSslfSUwbkfr6+px7Y9tnikceeSR2Oq5NBI2NjXmzqvJZVe3t7V5jlkqlQq2q8fFxjwSCFIdOjnjnnXeyb9++QOIwxng2XlzFofdWn9m2tjZvCny7HLbiyEcc+hzpvdq9e7e38mWU4tDGX+tG91XFYb9HHR0dPP/88xhjchSHTRwi4tVDGHEcddRROWW2OzthiiMoq6oqiANARN5IJrbwNyLyORH5XNlKVEWwU0eLjXFErQCoM8wGNco2kiiO+fPnM2vWLPr7+z1LYWBgIJI4klpVQYrDni4lCJogoC+V3XjqOfyK48tf/jLXXnstkGlcampqOOqoo9i3b1/OYDHdf2hoiBe+8IXARCOTT3Ho6H6IZ1WNj497DZ2tOGzi0PtsN6hJFIfWgTZetbW1OWttJM2qUqvKnp4EmJTmbV+//1nVQXwnnXQSt99+O2NjY56684+uPnDgAEuWLMlRHC0tLXR1deXYjAp/tpz29v1+vR3j8AfHgxIPAHbunEi+XLhwYaDiCLOqIJo42tvb+cMfMomnxx57bCBx2Agjjpe//OVAMuIIepbjTBBZLOIMALyezHxVVwJCJpB9WNlKVEWwFUexMY6oFQCD0i+LVRwLFy6ks7MTYwwHDhyY1DsOK28hwfEkigMm1IU/xqEvrl9xDA4OenGbbdu2sWjRIubOncvY2BhDQ0OT0k2Hh4fp7Oxk9uzZbN26FWDSOA7ITce170lcqyofcfgVR2NjI+vXr887jkMJVevAzkqy1UTSrCq1qvzq0W+B2cQRpDhaWlo4++yzvZkFgojDrhu/4pg3b96k2XJhQhWo4lDCGRkZ8RrahQsXsnv3bg4cODBJcdjBcT9xpNNpLytpwYIFtLa2eunCNnEo+QQRh4h4+/qJA+C0007j7LPPzpnVNi5x1NfXc8IJJ+SUuVjiqLTieIUx5l3APmPM1cDLgSPLVqIqgp0BVGyMI2ocRxBxRAXH8ymO5557jvnz53sNzv79+yc1ckFQxRGUjhulOJIShxKUP8ahDZY/OD4wMODFbdRu0xept7c35/xqtzQ3N7Nw4UKefvpp75yKoJctLnHYwfHt27fT1tbmNUhhxKEN6gknnEBPTw/PPPNMTjmCFIc9c6697rytJvzB8XwDAJU4/IpD61rvd5TiUKvqDW94g7dNrSr72u2Oij/GodaQ7e339fV59862qiBXcRxzTCZ/ZsuWLYmC45BZbwUy40paW1u9e24Th55HG22bOJqbm735og47bKLv3NXVRU1NDddeey0iUpDimDdvnqeS9R2rq6vzOjn5YhxBo+0rHRxXg3ZQRA4FxsjMVzXjUcoYR9TIcX2x7UY56Jjqr+frSQwODuY0aDq3DuQnjtHRUa9hCQqOx5mrKio4rudRMrVffJs47LobHBxkz549jI2NTSKOffv25TSSanM0NTWxYMECjzjyWVX2vQ0jDrWqlPz7+/vp6urysuHyWVU6LYmSYJRVZa/VYROHrSbiWlWjo6PU1NR4s+2GEYf+Jh9xtLS0cOKJJ3oNblCMI5/igFzisLPllECCiEOD0wMDA5HBcX86LsDxxx/P6tWrueKKK7xja/02NjbS398/aS433a+7u5umpiaOOeYYfvjDH3LBBROTeX/84x/n5z//uRdXK5Q4TjvtNG6++WZvVmIR8Z7b6ag4fi4iXcDXgHXAVnyz2c5U6IvV19fnBelsFKs4jDE8+OCDXgOQT3HoMfM9ENrA2cSxbds26urqcgYwBR3bnnqi3FaV/eKHWVVqPRljeO6557xZSbUH5lccShzNzc0sWLDAsyPyEYf9OSzGYSuO8fHxSZM+6vThCr9VpY2e+vtRwfEo4hgbG/MGukE8q6q+vt4bmJaEOPxWlWYO1dTUcOaZZ3rXJSKTiKOuro4FCxYkJo4oq0ob8rGxsUTBccjYXOeeey6HHnpojgpqamqira0tZ7yGP76kxCEi/NVf/VXO8/SCF7wgR4EVYlXNmzePmpoa3vWud+Xsn484goLjFSeO7AJO9xhjeo0xt5OJbfyFMeagCo5rEM0OoELx4zjWrVvHy1/+cn7zm98AuY1bvpTZKGhD4beqFi9eHFpWPbbur+VWKJkUGxyHiRfHb1VpvdhWlZ1yu3HjRkZGRiKtKps41HvXcyqKsarsGIdtD+k1RCkOP3FEKY66urrAGIeqCXt/TYCIyqrSaS9s4tD9tUOj99HOeApTHJBZT76+vp6lS5dOmtdNY1F6bHsAXD7iiAqOa4NvD67TuoxKxwW8RZfs40AucYRZVf39/YHzuwWhUMURBH2+kqTjVtyqMsakyaypoX+PGGP6In4yo+AnDgheBS7pOA7tLWqmxrPPPptzPihecdTX10+yqqJsKru8Shz2g6fb7GkPSh0ct7/XstjZN5q5Eoc41KpSlNKqiiKOoAGA+RRHWHA8SnHY5dUeum1VjY2NeYokjDj808fEURy2yjrvvPPo7u5m4cKFk4jD/7xp2cKIQ2Mi9vVEKQ4NYucLjvsVh8K2qpqbm73yh1lVEDwxaBBKSRyFWFX2OJ84a/cUgjhW1T0icn4lV9qrFPIRh96ssHmZwhSH/lZfNLuXrIgio3zEoT1jv1WVjzj8isNuzPr6+nIadHv/oClH8p1HraqgnqFtVQURx9KlS/PGOPyKI4lVFXccRz7iKFZxRAXHdf/6+nqPIMKypGyrSlcUtPfX3ySJcSj0GctHHEoCLS0tdHR0UF9fP0lx2NYw5FccQXNVhaXjQu50IbbiaGxs9Mrvt6oKIQ7bqgpS4PYCbyMjI/T39xdNHEHBcf/nUiIOcbyfzKSGIyKyX0T6RSR6+a4ZAn1BohRH1LxMYeM49Lf21Bj2+SBccRRiVfX29rJz587IVFw9NgRbVX19fZMmWQtTHPmC40FWVRzFsWbNGqB0iiMsHTcqxmFPchhEHDbp+LOqkhCHrTj86bhKusCkMRJ6PPv8pVQc/qn1FTZxpNNpLxblL5sOHpw7d+4k4jjyyEyyZhRx2IrDPw4oyqqaM2dOzjOm9VZfX09tbe0kxaHPS0NDQ2B6bBTsKUfS6fSk98Gey0rroFDiEBFEJNCq8n8uJeKMHG83xtQYYxqMMR3Zvzvy/W4mIEhx+O2NqJiBPrz+cRx6HO35lVpxaEPR1tZGTU0NTz75JGNjY0VbVXGJoxCryn657BiHTRwaoJw7dy4NDQ20tLQUFONQhZjUqvKn4watiKhk1NjYOMmq0iwkrV8tRyHBcTvFVmHHOCB3MkQljrGxMe/6SqE47HPr8/z8889Pet60odaGcN68eZOsKj9xBFlVfsURNzhuPwtB5dGZsP1WFUzUf9BSBEHQ32o9BykOva64xBEW44DJC5MFze9VakS/4YCInBq03Rjz29IXp7qgD4pm5kCw4giD5nT7s6r0t+WyqrShEBE6Ojp48MEHgejBfzDxkumL61ccds9Xr6+uri6xVdXY2OiNxA/yom2ryg6OQ0ZtqMLTEch2o6tl16wqRSmsqqBJDsNUYktLyySrqqWlxQvC2nUUtJBTXV2dd2y7t6lWVZTi0Lo766yzOP300xkbG6OhocGrA7uOgsoQFhxPpTJrleRTHDt27AAyS8baZdOsJJhMHDt27OBNb3oTjY2NsRRHvuC4v0NiPwv2cWzi2Lt37ySrSvft6elJbFUpAUcRh3+G3rBjhSkOPX7VEQfwSetzE5m1xB8GXluWElUR4sQ44mYQ2eM49LdRxFEKqwoyNsemTZtYsGCBlx8ehnwxjqD1APy9ZXvOrajz9Pb2TrIa7O/9ikPnN7J7sbNmzaK3tzdw9bympia6urq8+i9VjEOtDf98T/5raG5unmRV6QR/Bw4cyFGqYYpj0aJF/PjHP+acc87JqRs7xhGkOLQcf/jDH5g9ezYtLS05iwkFPW/2GhFhVlWQxWVfr996tafub21tzfndvHnzvFH96XSakZERb3lkv+IIs6pKqTh0CQW/VWWfM6lVFUdxaKdUBxb60dzcTG1tbU4HwY8oxVFJq+pc69/pwIuAyRPNzEBo71J7BZBMccBkPz9KccRJx7UVx6OPPsptt93G73//e+/78fHxnIVstLH/0pe+lGN5hB0bJnqc9tiVIKsKgjOCSmFViQj19fUecbzgBS8AcgcwdnV15VhVdqxJvXTtaYal427ZsoW9e/fm3Ne44ziCYhwKW3HYy/XqPbDrKCw4DvD2t789MqvKPypb97GvxbaqYIKM/anVtlWldWnXS9AMyfa59fug1O2WlpZJxKGKw27s7XrTBjvKqrIVR9SUI37FEWRVBWVV2eUoB3Houx+mKJqampg1a1ZoHBUqY1XFmuTQhx3AUaUuSLVCJawiSYwD8AZd+YnDVhxB1kGcdNzTTz+dt771rZx66qleGe1sG4Bly5bxspe9jEsuuSTvtfqtKph4CIOsKj1PqYPj+mI1NDRMIg7bbuvs7MwhDn+KJUw0GGGK45xzzuGqq67KGUNSTDqufX5bcdTU1FBfXx9JHJodFfVcxbGqFi5cSF1dHUuXLqW/vz8nqwoyxKHlUfiJQzsJ9r0NGgRqX6+96Jl/v+XLl7Ns2TLv73nz5rF///6ca7HtOShNcFxnUNCpShRab3r/wrKq7HPGJY76+npqamo85e4nDntGinzEsXTpUo444ojI8/mnMaoKq0pEvgXoYkk1wHFkRpAfFGhpaeH555/3/k6qODQF0m9VFRrjsF/wffv2sXDhQnbt2kVPTw9z5syZRBy33norxpjQlGEb/uA4ZB7C5ubmsimOoLRJJZHGxkavboIUh06hYROHqiV9ydWiCCOOnp4eent7PeLo7OyMNQBwZGTEqxuFfd0tLS3ecYaHhz0FpORrE4Nerx7fJtSwutNrDiKO008/neeee44rr7yShx56aJLi6O3t9cqj0PnDIEMcagPaz3sUcdirZep122X7p3/6p5xjaTB4z549XsNcX1+fU59xguP50nEbGxt55plnJqntoBhHmFWlv41LHLrMq3bm/O+DBrr37dtHb28v9fX1gXUKmQWo/AkKfvgVh0325bKq4sQ41lqfU8Atxpj/V5bSVCGam5u9niBkXu6HHnqIDRs2xIpx6AMZpDj8WVVx0nG1t669KyUO/xrR/sVg4kAbMNuq0XzzMOIIUhxxiMM/rXqY4tAsJZ3nyU8c9uy47e3t3iy6tuKwCRtyiUMzlPTl1LUVgmBbVVpHUVaVrTj86zv4FQdMxKainiu/VRUU4xARZs+eTXt7e6hV5X8u/MHxWbNm8fTTTwcqjrAYh34fNiGmfY/tQYBaN0kUh9ZBvhgHEPjchllVpVAckCEHtbj991LjGT09Pezbty9nvjM//PUWBLVOr7/+ek466aSqsapuA/7TGHOzMeZHwIMiEkyPPojIWSLyhIhsFpHPBHzfKCK3Zr9/SESWZbc3iMhNIrJRRB4VkddYv/l19pjrs/8O8R+3lPC/JKlUihtvvJFPfepTsRpJfSCjFEfQXFX5Yhz6QOgLqMShL04+uygI+oDaRDk6OsqBAwdIp9OBVlXQ9BZx4j75Yhy6n+Kss87ijDPO4OSTT/a2NTU15RCH3Yjqb1euXMmll16a82La4zi0AbIVx4EDB3LqwH9tOvofwsneb1X5F03yB8f1+BDPqgpSHP5nVTO4whSHDb9VpdZJMTGOqICuTRxhVpWWsZjgeBiCguPj4+M586UpCiGOrq4uL4bjL4smDezdu5fe3t7IjKk4UMXxyU9+khtvvLFqiOMewH7KmoG78/1IRGrJTFdyNpnVA98uIkf7druMzHTtRwDfBL6S3f5eAGPMi4HTgX/OzpuleKcx5rjsv+DuYYngf8HGx8cZHR31vOM4MY7h4eHIGEfQufJlVfmnsVB7ya84ksB+WRSjo6OB043Y5SzEqlIlEzYA0P6/qamJww47jLvuuisnUyfIqtLrUGvurLPO4gc/+EHO+e1xHEHEYYzJWbXPf2329UXFOOzguDY6Sr5hikPLlc+qjIpxKHS97JGRkZwYRxziUDul0BiHPbNrEPIRh3+G5JGREWpqarxjBqXj2kos33sZpDi0buztMPFcJVHvXV1doYpDn2G1SaPGaMSBxjgGBgYYGhqqjqwqoMkY43kX2c9xFMfJwGZjzBZjzCiwCljp22clcHP2823A67JTmxwN3Js93/NAL3BijHOWHEGKQxsafz5+2O9tqypIcQSdK5/i8BNHmFWVBEGSeGRkxAuWx7Wq4kyrro1Q2JQjdnnCeq5BVpVuj0I+qwqCU3LtGIddBkWhisM/YC9KcYQNALSnKFHod34ffefOnZPqNI7iyEccGncYGBigpaUlMhMojDi0nurr63PqRZcUtt8fv2JNojiCYhwwkXFmvwuFWlVhMY6Ojg5qa2tzrKpiUFtbS39/P8aYScRRyXEcAyJyvDFmHYCInAAM5fkNwCJgu/X3DuBlYfsYY1Ii0gfMAR4FzhORW4AlwAnZ//+Q/d1NIjIO3A58wQT4CiLyPuB9kH/gWxT8L0kqlfJe2n379iUOjkcpjiTpuEocfquqVMRRU1NDOp32VuADQq2qQgYAag8/yKrSz0ogYYFDzVjT88d9we2U6PHx8UmKAzLE4R+UZWdVKeKk4wYRRz7FkTSrKqiOtD56enqor6/npJNO4itf+Qr79+/ntNNOy9k3THEkIQ691rDR5UH769TjkKs4lKBFxLOqVEnW1NSEBscLtapsxaFZUYqkwXHIKA61M/1l0RiUKg4726wQ1NbWeq5ANRHHR4GfiMizZJaOXUBmKdly4kYyKb9rgWeA+wFNG3inMWaniLSTIY6Lgf/wH8AY813guwAnnnjiZMM6JoIUh00c+R6mJIojyVxVfuIotVXV3t5OX19fLKuqkOC4wm9V2XZeHMUBE8H8pIpDX6og4ggay6HXZjfqcRRHIVZVkG0I4QMAgxpqrY++vj6vB/+pT30q8rj6XHZ0dHgNtCJqAKC9WubAwEBkfMN/zWHEISI5q1JqndgkUWiMo6GhIUfh2MThr/tCYxyKoLLMnj27ZDGOuro6zxUYHBycEqsqL3EYY9aIyF8AL8xuesIYMxb1myx2klEJisXZbUH77BCROqAT2JtVEB/TnUTkfuDJbHl2Zv/vF5Efk7HEJhFHqRBmVUGGOOxpFcJ+r8Rh586PjY1NWnO5EKtqzpw5iMgkxZHvxQmC3aB3dHTQ19eX16oKWjQojuJQ+BVH0Oy7Yb1XrS//inFxFYfWYRyryhiTyKryKw7twRcbHA+LcQQ15lofxphY9qG9Hnlra6tn/yhKqTjsDlRYjMO+Xps4tLMSFBzPtyqnjWXLlnnvr21V+Z+fchDHnDlzPOIoRYxjqhVH3hiHiHwIaDXGPGaMeQxoE5EPxjj2GmCFiCwXkQbgImC1b5/VgI5MuwC41xhjRKRFRFqz5z8dSBlj/igidSIyN7u9HjgHeCxGWQpGUHC8UKuqtrbWazj2798faVVFpeOm02mvR6zzH5XCqrIbbSWJ0dFRjzjiDgBMojj8U0MEpeVGWVUwYdPFDWL6icNucPQa/aRu2w75iEPnKEun06TTaW8cBwRbVf4YR1RwXAlJn50oxWFnmcUhDtuWbGlp8QLOijjEMTg4GEtxqOUURhx2RyJIcYTNVZWk4/Twww/z6U9/Ouea9u3bVxLFYZNBUN3Pnj2bnTt3Mjo6WpIYh76jdswPKptV9V5jTK/+YYzZRzbrKQrGmBRwBXAX8DjwX8aYTSJyjYicl93tB8AcEdkM/A2gKbuHAOtE5HHg02TsKIBG4C4R2QCsJ6NYvhfjGgqGvhB2D0lvzMjISOLguDbIQcTR0NCQ04MKgj7U+qDoNBalsKr8igMy1zgVVpWWNyi7Kp9VpeVLalVFEYdfcdgNkn+gn8IO9Nsqwh7HETQAMIni8F9znBiHfY4waIq0bUcFKQ4lxbByxVUcMEEAdt3awXEIVxxB6bgw0VDGIQ5dF8Quf5BVVWiMw75OP2bPns3TTz89ad9C4CeO0dFRr6yVHABYKyKiAehsmm30iJQsjDF3AHf4tn3O+jwMvDXgd1uZsMbs7QNkAuVTBn2gOjo66OnpySEOyP+A2mmKNTU1OYsrDQ0N5TS89jxIUTEO/T1kHuaOjo6SKI7a2lovKK4NnCoOEclpiOzy+IPjcRop+5z2ddnf5VMcYY1ovhdcA582cWgDqY2EX3HY42PyxThsO8s/NUmxwXGti1ITh95HmziCFId/xLn/XAcOHGBwcDBn0aQwBGVC+RWHjsAPs6r8WXl6T/Ol4/phW1X+Kc6PPfZYXve61/HSl7409vHiWFX63pTCqtL7psTR3t7O8PBwRRXHL4FbReR1IvI64BbgzrKUpgqhD7K+8PaDDvkf0KamJm8wWW1trdcgK3HYmTt2TzWu4mhubvZmjtXy6bEKgR7fTxzt7e2B05bYxKdxgKlSHLZVpYvxQPLguDZCEK447MYtn1XlVxx2cDwucURZVTA5rhN0zf6VA6Pgt6qUOPwDAMNI3F5YS9Nx88E/9iIoxqFTn8QJjsMEcSSN8Wn9pVKpSYpj7ty53H333Rx66KGxj2eTQZjiUJRCcSg0OG5PEFkOxCGOT5MZU3F59t9GcgcEzmjYigNyYxwQT3EogojD7t3YPdWoGAdMNByltKpg4oX1W1VBNpXub3vzEC+jRREV40gSHLdHRpcjxhFmVQURh72PX3FEzVUVZxxHORWHMcbrgIRZVWH3QhvK3t7eRFZVPsWhMyDnUxylIg4IHgibFHGsqqB9C4F9fNuqqqurK5tVFWda9TTwELCVTAbTa8nELA4K+C2GpFaVbZvoOI62tja6u7sxxuQoDrvBiRo5DOWxqiBccYQRh6044qZCxs2q0s/5FIefOJJmVdmNV7kUR5RVZS81CtGKQ4/jX244H3Hkm+/I/1yFWVVxFUe+4DhMPDu2So5DHLZSKbXigGSxjDDEsaoUpbCqFEoc+j5M+TgOETkSeHv23x7gVgBjzGlhv5mJ8PcU/VZVUsWhx9q9ezfAJOKwG58ghAXHS0UcYYojKKNK909KHEmtqjiKw17hLqnisK2qJDEOf6A4iDg0MULLpo25/bLbYyD0XHEVhzYQQXWk62XbC3uFIYg4kigO7Vjs27evKMXhD47rKo+NjY2xguPDw8OISKzZoG3Y5Z1uisN+VjQZQ6dsqYTi+BMZdXGOMeYUY8y3mBiEd9Agn+LIF+OwGzF9mDs7OycRR21trbcUK+SPceSzqgoZxwGTiSOO4rAtFt0WhbjB8SRZVcUqDiUOndMpTlaVP1AcFBy3rR/9vaa6+q9DiSNJcLyuro7FixeHridvT1keBT9xBKXj+tcfsVFXV+ctsTo4OBhbceSzqsJiHFHB8UKe/VJbVc3NzV6dTiVxwERHyl7VsdSIIo63ALuA+0Tke9nAePjkMzMUxcY4gtaB6Ozs5LnnngMmRn77lcZMtqqCYhxBiiPJOI5CYhx2D9+eHK+1tTVUcfiJw0aQ4tAG3t63vb09MDPLLk/c4Hh9fT1r164NHRGuHZ64xGGvDZNEcUCmkdcOUamC411dXd4gVL/iCLOqCiEO+76WwqoSEY8QoqyqlpaWvDZiPviJo7e311McU04cxpifGWMuAv4CuI/M1COHiMh3ROSMspSmCqEPsm1VFRMc12PpC+YnjrjB8b6+Pm8Kk/b2dsbGxhgZGamIVaWKI67aiZpypJBxHOl02lMK9vYwRFlV2niFxThsNRFFHH7F4V8YqFDF4U9Brquro6urK7Txias4gtYjTxLjgEwjv3NnZnKIUikObXyff/75HOIYHR3NWSLZJo6kqbgKrdtSKA4gkjhUcRSrNoKO39fXV1GrCsiMnTDG/NgYcy6ZaUMeIZNpdVCglDEO26rShkmtKj9hxEnH9ad47t+/v2TEYafzRc2nMxXB8XwxDv19XKsqaByHPelikOLQBrWtrS2UOIIGAPqtKoALL7yQM888c9J12MQRV3Hkq+tCrapCFIdNHMUqDtuqgtz5u+rq6iaN19B6GBoaKtimLTVxaNmDyqOdh1IQh58olTjKaVUlquHsqHFv8sCDAcXGOMKsKoX2POIqDvsF95OarhES9ft8sO0eXbp1ZGQkJwvEX550Ou3NMmtfQxhKlY7rn6IlqeKwJzm0raogxbF9e2ai5yVLlrBt27bA88RVHF/84hdzftfY2IiIeGQVNziu03ZEoRjiSBLjgAxx/OEPmQms4yiOuMFxha04lDhLZVXBxP0shVUF0YpDZ8gtB3EMDg5WzqpyyEBfPG3sixnHoS+5bfu0tbXlBEv1/7AGIUpxlII47CB1Q0ODtxSrHcyzYaedxg2Ol2oAoDa4+vuo1FQb+ayqIMVhE0c+q8rOjgtSHH6ISM4MA3GC4/39/bEayKQxjr6+Ps/vD1IcUdcxa9Ysr6GKozj86bhhMQ5FkOIoVXDcLvNUWFWQcRvC3qskCHpWym1VFVbDBxFe9KIX8e1vf5tzzz0XKE06rq04mpubvZlIYcLmCFsERx/q/v5+b1oH26oq1cjxpqYmGhoavFhM2AOuL7i/AYhzDpioExGhtrY2kVWlq8zp1C2LFy/m+9//Pueff37k+aOyqlRx6II+iu3bt9Pe3k5nZ2ei4Hgc4tDv4wTHGxoaEJFYM95CcsVhrw5oN9C67nxYrAtyG/lyK44wqyrO/HFhmEqrCuBb3/pWaNJJEmgdtLa2ekq5vr6+eqyqgxE1NTV84AMfyHmpS5FVpVDisF+AqGPa64L7J84rpeJoamqisbHRUxxhVpWex14jopDguG5Poji0nEocIsJll10WeW77nHajqD0zJQ716hXbtm1jyZIlOSnTfkKLa1UFIa7iEBHPSovTQBZiVel12VaVLrgU1dDZjXyhiqOurs4bfwK5g+OiFMd0s6oAXvva15bkPPqszJs3zyMOVRz+DlCp4KyqmLBXjRsbG/OspELGcdi9tjDFEQa7N1StVlUhMQ6AhQsXsnDhQu/vQw89lLq6OubPnx96LH8PNQ78xAG5s6raPTfF9u3bvZUk9feFpuOGXcfQ0BDGmMjgODApgByFQojDrlO9p1FT6ysKVRz+DsfixYu958AmqjiKo7u7O29dh6HUiuPwww+no6OjZEQUBr12ezCxdsKcVVVh6M0ZGxsjnU57C7GUSnFobzOf4ogiDjurKunIWf/xVXFoufJZVfbiQoVYVQBr1qzJaXDOOOMMtm/fzoIFC0KPpXWQhDj8WVX2Z1UcQTGO448/Hpi4viTB8bjEoet+RHVIbEWQD4UQh6pLW3FELealsNVBXMURtGqf/Rw0NTV5a9rEIY7e3l7e9rbCFigtNXG8+93v5k1velPR4zTyQevATxwuOF4FqKmpQUS8B1Yb0lLEOOwUT7vRCYL9EIZZVVExknywrSr7XOUOjus57JdWRCJJAwpTHDolhZ84RAQRmRQcHx4e5vnnn/dGZxcS48jX62xpafGmJ7HPEYQk15w0OD4yMhKoOKLWZFEktaqC0nFh8nOghGSPxA6zqgDOPvvsvOcOgpa5VAqhrq5u0hTt5YBtVSnKTRxOcSRAXV3dpB54PuKoqanxJGOYVXXOOed4XqSdkROEIMWhvUpVHIXaVDDZqtIyhvWYbcWhjWScrKba2tpILz8uCiEOyNwX+6Wyg6oaQzDGICLs2LEDwLOqkhDH888/D0Q3uHqswcHBnLTgMJRDcdjPlR0c9yuOUlpVfsURVsauri527do1aeQ4TM7Kq6+v53Wve13ecweh1IpjqhCmOJxVVSUIIo44DV9TUxOjo6OTFIeu+Pexj3nLq+e1qurq6rysGn3Q1V7p7++PtZBSFPSlsSeVi0oZtBWHZmDZcYowNDQ0FDVYS1GIVQWZOvMrDjs7JZ1OMzo6SmNjY04qrv4WogcA6uctW7bQ0dER2eDqsfbv35+T3RWGclpVWhb9jT/GUUqrKkxx+KGEZAfH7WPY/5966qmBC47FwUwjjmlrVYnIWSLyhIhsFpHPBHzfKCK3Zr9/SESWZbc3iMhNIrJRRB4VkddYvzkhu32ziPyrFOrJFAC7sYmrOGDigbRHjtvbbdgNdhBEJMdOUuh8VcUqjqamJq/h0/OEZVRBruJQ4ogKZvt/VynFUVtbm/NS2cShjZ4GyHXAn9+qCsuqslXjnj17PKWS7zqGhoZixYmSBMeVsPI1hjZx2MTkt6riKI6GhoZY74U/HTfsWVBCshWHwj9lzRve8Ia85w1DqbOqpgq2xadtjM6kMO2squwSs9cBpwM7gDUistoY80drt8uAfcaYI0TkIuArwNvIrmlujHmxiBwC3CkiJ2XXBvlO9vuHyCxLexZTtCKh7a0WQhz2XFX2dhuf+tSnvAY4DPpA2A+4ZgK1tLQURRzve9/7vCCwvoxRikN7Oc899xy7du2ira0tVo9PG4FKEocN26pSm2VwcJDZs2d7imPx4sVAsuA4EDpzrf867BhHVL3YVlI+nH766fzLv/wLJ5xwQuR+YYojSXBciSOO2rCPryPlw/qAcRTHUUcdxbXXXsu73/3uWOcOwnRXHK2trTQ3NzMwMDCtraqTgc3GmC0AIrIKWAnYxLESuCr7+Tbg37IK4mgyqw5ijHleRHqBE0VkO9BhjHkwe8z/AN7EFBJH0hgHTPRg9AZrrz6IOI477ri8xwuak0kzgewc+EJw+OGHc/jhh+ecJ4o4tFHcvn07u3fvjmVTQekURzFWlY0oxbF9+3bmzZs3qcGOE+OAwoijVIqjqamJD3/4w3n3CyIOW3HEiXG0t7d7yQVxYCuOqOv1E0eQ4qipqeEjH/lIrPOGYaYRh3YwNVZXSpTTqloEbLf+3pHdFriPMSYF9AFzgEeB80SkTkSWAycAS7L778hzTABE5H0islZE1nZ3d5fgcnIVx/z582ltbfVGb0fBb1WJCJ2dnbF7Zn4EWVXa8BRrVQWdJ8qqWrhwIbW1tWzfvp1du3blzYLyH7vYGIfWbdKUxyjisBUHwBNPPMGyZcu8fTs7O2loaGDRotxHL4w44lhVmlVV6uB4XORTHPv3788ZqBqEmpoaurq6EimOUhFHKVDqrKqpgtZBW1tbzvvQ2NiIMSZnpotSoVqD4zcCRwFrgWeA+0m4iJQxxpuM8cQTTzSlKJQd4+js7GTz5s05Aakw+K0qyPTcCh2oFKU4xsbGStagxFEctbW1LFq0yFMccRSTfexqURz+rCrIKI79+/dz//335yQwzJ49m6effnoSSU6VVZVEccSFfawwxRFneoyurq5EikOtqqhn1h/jCLKqSoGZojggdxYGXUq2lCin4thJRiUoFme3Be4jInVAJ7DXGJMyxnzMGHOcMWYl0AU8md1/cZ5jlg22VVVfX8+CBQsKsqogQzzlIo6pVBwwMWNsIYqjkum4NoKsqsHBQe655x7GxsYmjQ049NBDJx2jWKtqdHQ0ZwR71L759kkKTZH2H99WHHGJY7oqjplGHHod5QiQl1NxrAFWZK2mncBFwDt8+6wGLgEeAC4A7jXGGBFpAcQYMyAipwMpDaqLyH4R+UsywfF3Ad8q4zXkwE8cceG3qgBWrlxZ8IhSe3yFopzEkW8Gz6VLl3LffffR398/bYgjjlU1MDDAnXfeSXt7O6985StjHfPNb34zr3zlKwtSHHrOoPLZKIfigIkUabtOx8fHMcbQ19eXN6UYMs91XEKLqzhe+cpXcsopp3h2YbkUx8knn5xznukCrYMgqwqmGXEYY1IicgVwF1AL3GiM2SQi1wBrjTGrgR8APxSRzUAPGXIBOAS4S0TSZEjnYuvQHwT+HWgmExSfksA4BI9YjYMgxfH5z3++4HKEKY5SxzjiWFWQaRiTjOGwj13JcRw2wqyqO++8k9NPPz328X/6058CeJYTTGRjRUFfeB1EGSc4XspGE/CmmPEfP5VKxbaqkjzXcYPjRx11FL/73e+8v8ulOPznmS6wOzz2tPS2VVVqlDXGYYy5g0zKrL3tc9bnYeCtAb/bCrww5JhrgReVtKAxUVtbm7PWc1wEKY5iEEQcOvK4ElaVHfydzopDp+dQxbF27Vp27NhREMnrvT7kkENiBVv9xDHVwXGYrGS1TlOpFPv374+lnJJAraqkcblyEcd0hdaHrTh0HAdMM8UxE2ErjkKIo1QPeVBWVSWtKrtBSao4qok4/OMQ7rvvPgBe9apXJS6XiFBfXx+7sdVzqnKL6t0Xes354CeOQhRHEhQ6FXq5rKrpine84x3MnTuX9vb2HKvqqKOO4sMf/nAsizEpXK0nQKHEEWRVFYN8wfFSpRMmsaoUU604ymFVqeLYuHEjra2trFixoqCy1dfXx0rFhYnGWkepR2XrTbXiGBsbKwtx6PGHh4cT3T+nOHKxePFi3vOe9wC56enHH3+8N5i31HCz4yaAHRxP8tJOhVXV0tJCOp1mYGCgZD3RBQsW0N7eHtuqqq2tjZWeDKUfx1HK4Hh9fT21tbUYY3jJS15S8H075JBDOProo2Ptq9fxzDPPAETOqlrO4LhdFr03IyMjDAwMlLznqsdPOmeZUxzhKHRcU1K4Wk8Au7GpNqtKz7F///6SvUzvec97OPfcc/OmJ86ePZvm5ma6urpiX2O1WVXpdDpnGdvW1lb2798fe1xKEB588MHYja1fccQhjqlSHD09PUD+GX6TwlYcLsZRGkwVcTjFkQD2w12IVVVuxQGZgVql6onW19dz6KGH5t1PRFiyZElsmwoqb1XpvbDr0L6/Wp8vfelLCy7b/PnzY4/VsYmjra0t0m6c6hjHnj17gNITRykUhyOOXDjFUYUolDhKrTiUOPzjOCCjOErdoMTBW9/61kQPa7VkVbW0tExaTQ4m4hzFEEcS6HVs3749L1mXW3H4rbC9e/cC0fNUFQJbcSSZCt2+186qyoWdjltOuFpPgEK91VIHx8OyqiBjuVSCOL7whS8k2r+xsdFbVbEYFBscb2lp8awY+/60tLRQV1fHi140NZnfev9GRkbyrho3VVaVHl+Jo5yKw14EKh+cVRUOZ1VVIQqNcWjvtdRzSAURR9KyVQo6Q3Cx0LpNOk1E0GJM9v1pa2vj6KOPnrLpJ+xyxCWOUt9nv5L1E0e5guMuHbd0KPR9SApX6wlQqFV17rnn8o1vfIMjjjiiJOUIGwBYSNkqhcsuu6wkvfkXvehFfP3rX+fMM89M9Dv/vFT2NoBrrrmmZDGpOCiEOKYqOF4uxeGC46XHBRdcwPj4eKJ4YyFwxJEAhfZ0Ojs7c2ZXLRZRVhVMD+JYsWJFweMjbNTU1PDxj3888e+CFIfdCL3+9a8vumxJkIQ4pjo4PhVWlVMcpcG8efO44ooryn4eZ1UlQKGKo9RYsGABbW1tOWQx3Yij0shnVU01GhoavHhPPuJoamqiq6sr736FlAEmE5OuZ1MuxZGUOJziqDwcXSdAoTGOUuM973kPb3zjGwPXiQZHHHGQT3FMNUTEm28sHyHU1NTw2GOPxR5sGRe6Vrg24vr/jh07cqazKBX0+MYYl447zeAURwJUi+JoaGiYNAeSTRxOvueHxi/CYhyVgJYljpJYtGhRyQOgDQ0NgR2Q7du3x56DLAkKTat16biVh6v1BKhmb3W6BccrjWqzqmCiLKW2oOLiVa96lbceCOTGOI455piSn6/Q98lZVZWHUxwJUM3E4ayqZKg2qwoqTxwXX3wxP/rRj7y/7eeoHFk6hSr4an4PDxY44kgA2/stduBaqWGvc+2IIz+UJBoaGjzb6mAnDj/sRrlarapK37ODFY44EsCePbUaUa6BYTMR9r3U+qp077W5uZmmpiZvEFelMZWKwwXHpxcccSSAP9uk2lCu/P6ZCJs49H5WuhFqbm5m7ty5VaNmneJwCENZiUNEzhKRJ0Rks4h8JuD7RhG5Nfv9QyKyLLu9XkRuFpGNIvK4iHzW+s3W7Pb1IrK2nOX3o9qtIKc44qMaiWPBggUcfvjhFS2DDbsxr0bFISJTOrrfYQJl6zqLSC1wHXA6sANYIyKrjTF/tHa7DNhnjDlCRC4CvgK8jcw65I3GmBeLSAvwRxG5JbsWOcBpxpg95Sp7GBxxzBzYMY5qsaquu+46UqlURctgw36OqlFxVPp+HcwoJ12fDGw2xmwxxowCq4CVvn1WAjdnP98GvE4yOt0ArSJSBzQDo8D+MpY1FrSxqdYHtlxzGM1EaE+1mhTHrFmzqiYwDtWrOJQ4Kn2/DmaUkzgWAdutv3dktwXuY4xJAX3AHDIkMgDsArYBXzfG9GR/Y4D/E5GHReR9YScXkfeJyFoRWatTJhQLpzhmDqrRqqo22A10qUep28eHwqwq10GqHKrVIDwZGAcOBZYDHxcRNX9PMcYcD5wNfEhETg06gDHmu8aYE40xJ5aqF1ftxOGC4/FRjVlV1Qatj/nz55clluAUx/RFOYljJ2DPi7E4uy1wn6wt1QnsBd4B/NIYM2aMeR74f8CJAMaYndn/nwf+mwzJTAmqnTic4ogPpzjyQ5+jck3RXWxw3N2vyqGcxLEGWCEiy0WkAbgIWO3bZzVwSfbzBcC9xhhDxp56LYCItAJ/CfxJRFpFpN3afgbwWBmvIQfTJcbhiCM/HHHkh9ZLOQLjULhVVVNTQ01NTdW+hwcDylbzxpiUiFwB3AXUAjcaYzaJyDXAWmPMauAHwA9FZDPQQ4ZcIJONdZOIbAIEuMkYsyFrV/13Ns+9DvixMeaX5boGP5zimDlwVlV+VKvigEzZHNFXDmV9U4wxdwB3+LZ9zvo8TCb11v+7AyHbtwAvKX1J48ERx8yBUxz5UVNTQ2dnZ8lWrvSjmFlu7enfHaYeruYToNqJwwXH46Ma03GrDSLCI488MiWKI+kz6xRHZeGIIwFcjGPmwFlV8bB8+fKyHbsYq6qurs4RRwVRrem4VYlqVxxuAGB8OKuq8hCRgjtj9n1zmHo44kiA6UIc1Vq+aoIjjupAoYP5nOKoLBxxJEC1j1hV4rDXIncIRhBxVOt9ncko1CZ0iqOycMSRANW+Hsc555zDP/7jP7JixYpKF6XqERTjcD3YqUehpO2C45WFo+wEqHaravbs2fz93/99pYsxLWDPjuusqsqhUMXhrKrKwimOBKh24nCID2dVVQeKURzuflUOjjgSwDUwMwf2OA5nVVUOTnFMTzjiSIBqj3E4xIfLqqoOOMUxPeFqPgGcVTVz4Kyq6kChiuOUU05xRF9BuDclARxxzBy4rKrqQKGk/dWvfrUcxXGICWdVJYDrmc4c2J0AZ1VVDu6dmp5wdysBnOKYOVi5ciV9fX0sWLDANV4VhL5L7p2aXnBvSgK44PjMwaJFi/jsZz8LuKVIKwlH2tMTzqpKAKc4ZiacVVU5uJmJpyfc3UoA1zuamXD3tXIoRd2PjY2xY8cOhoeHS1Wsgw5NTU0sXrw4dqfYvSkJ4BTHzISzqiqHUiiOHTt20N7ezrJly8guK+2QAMYY9u7dy44dO2Kvv1JWq0pEzhKRJ0Rks4h8JuD7RhG5Nfv9QyKyLLu9XkRuFpGNIvK4iHw27jHLCRfjmJlwVlXlUArFMTw8zJw5cxxpFAgRYc6cOYkUW9mIQ0RqgeuAs4GjgbeLyNG+3S4D9hljjgC+CXwlu/2tQKMx5sXACcD7RWRZzGOWDc7SmJlw97VyKFXdO9IoDknrr5yK42RgszFmizFmFFgFrPTtsxK4Ofv5NuB1krkCA7SKSB3QDIwC+2Mes2xwVtXMhFMclYMLjk9PlJM4FgHbrb93ZLcF7mOMSQF9wBwyJDIA7AK2AV83xvTEPCYAIvI+EVkrImu7u7uLvxpg6dKlfP7zn+ecc84pyfEcqgMuxlE5zCS197Of/QwR4U9/+lOli1J2VGs67snAOHAosBz4uIgcnuQAxpjvGmNONMacOG/evJIUqqamhquuuooFCxaU5HgO1YGZ1HhNN8wkxXHLLbdwyimncMstt5TtHOPj42U7dhKU827tBJZYfy/ObgvaZ0fWluoE9gLvAH5pjBkDnheR/wecSEZt5Dumg0MiOKuqcig1aX/0ox9l/fr1JTmW4rjjjuPaa6+N3OfAgQP8/ve/57777uPcc8/l6quvZnx8nE9/+tP88pe/pKamhve+971ceeWVrFmzho985CMMDAzQ2NjIPffcw+23387atWv5t3/7NyCzmucnPvEJXvOa19DW1sb73/9+7r77bq677jruvfdefv7znzM0NMQrXvEKbrjhBkSEzZs3c/nll9Pd3U1tbS0/+clPuPrqq3nLW97Cm970JgDe+c53cuGFF7JyZXEOfzkVxxpghYgsF5EG4CJgtW+f1cAl2c8XAPcaYwwZe+q1ACLSCvwl8KeYx3RwSARnVVUOM0Vx/M///A9nnXUWRx55JHPmzOHhhx/mu9/9Llu3bmX9+vVs2LCBd77znYyOjvK2t72Nf/mXf+HRRx/l7rvvprm5OfLYAwMDvOxlL+PRRx/llFNO4YorrmDNmjU89thjDA0N8Ytf/ALIkMKHPvQhHn30Ue6//34WLlzIZZddxr//+78D0NfXx/33388b3/jGoq+3bHfLGJMSkSuAu4Ba4EZjzCYRuQZYa4xZDfwA+KGIbAZ6yBABZDKnbhKRTYAANxljNgAEHbNc1+BwcMBZVZVDqes+nzIoF2655RY+8pGPAHDRRRdxyy238PTTT3P55Zd71zZ79mw2btzIwoULOemkkwDo6OjIe+za2lrOP/987+/77ruPr371qwwODtLT08MxxxzDa17zGnbu3Mmb3/xmIDOgD+DVr341H/zgB+nu7ub222/n/PPPL0ldl/VNMcbcAdzh2/Y56/MwmdRb/+8OBG0PO6aDQzE45phjWLFiBQsXLqx0UQ46zIRJDnt6erj33nvZuHEjIsL4+Dgi4pFDHNTV1ZFOp72/7TEVTU1NnhoeHh7mgx/8IGvXrmXJkiVcddVVecdfvOtd7+I///M/WbVqFTfddFPCqwtGtQbHHRymDMcffzxPPvkknZ2dlS7KQQft/epSvtMRt912GxdffDHPPPMMW7duZfv27SxfvpyXvOQl3HDDDaRSKSBDMC984QvZtWsXa9asAaC/v59UKsWyZctYv3496XSa7du384c//CHwXEoSc+fO5cCBA9x2220AtLe3s3jxYn72s58BMDIywuDgIACXXnqpp8SOPro0w96m791ycHCY9qivr6e2tnZaD+C75ZZbPItIcf7557Nr1y6WLl3Ksccey0te8hJ+/OMf09DQwK233sqVV17JS17yEk4//XSGh4d55StfyfLlyzn66KP58Ic/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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(test_accuracy, 'k-', label='Accuracy')\n",
    "plt.title('Test Accuracy')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(loc='lower right')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Loss')"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(loss_vec, 'k-')\n",
    "plt.title('Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Loss')"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6"
  },
  "kernelspec": {
   "display_name": "Python 3.6.9 64-bit",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.9"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
